package leetcode;

/*
1207. 独一无二的出现次数
给你一个整数数组 arr，请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的，就返回 true；否则返回 false。
示例 1：
输入：arr = [1,2,2,1,1,3]
输出：true
解释：在该数组中，1 出现了 3 次，2 出现了 2 次，3 只出现了 1 次。没有两个数的出现次数相同。
示例 2：
输入：arr = [1,2]
输出：false
示例 3：
输入：arr = [-3,0,1,-3,1,1,1,-3,10,0]
输出：true
*/

import java.util.Arrays;
import java.util.Stack;
import java.util.stream.Collectors;

public class problems_1207 {
    public static void main(String[] args) {
        System.out.println(new Solution().uniqueOccurrences(new int[]{-3, 0, 1, -3, 1, 1, 1, -3, 10, 0}));
    }

    static class Solution {
        public boolean uniqueOccurrences(int[] arr) {
            Arrays.sort(arr);
            Integer num = null; // 当前的数值
            Stack<Integer> list = new Stack<Integer>(); // 每个数字的出现次数
            for (int i = 0; i < arr.length; i++) {
                if (num == null || num != arr[i]) {
                    list.push(1);
                    num = arr[i];
                } else {
                    list.push(list.pop() + 1);
                }
            }
            // 判断是否有重复
            int size = list.stream().distinct().collect(Collectors.toList()).size();
            return size == list.size();
        }
    }
}